home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr05 / mswlogo3.zip / MSWLOGO.ZIP / LOGOLIB.ZIP / DEMO < prev    next >
Text File  |  1993-04-11  |  8KB  |  363 lines

  1. to demo
  2. ht
  3. pu
  4. settextsize 50
  5. repeat 36 [fd 175 setpencolor 0 repcount*8 0 label heading bk 175 rt 10]
  6. pd
  7. cs 
  8. repeat 18 [pu fd 100 pd repeat 4 [fd 50 rt 90] rt 45 pu fd 5 setfloodcolor repcount*15 0 0 fill bk 5 lt 45 bk 100 rt 20]
  9. pd
  10. cs 
  11. setpensize [2 2]
  12. repeat 72 [repeat 4 [fd 100 rt 90] setpencolor repcount*3 0 0 rt 5]
  13. pu
  14. setxy -50 -50
  15. bitcut 100 100
  16. cs
  17. pu
  18. repeat 36 [fd 150 bitpaste bk 150 rt 10]
  19. repeat 10 [scrollx 10]
  20. repeat 10 [scrolly 10]
  21. repeat 10 [scrollx -10]
  22. repeat 10 [scrolly -10]
  23. cs
  24. setpensize [1 1]
  25. rose 150 30 [pu  setx xcor + 5  pd]
  26. cs
  27. hanoi 3
  28. pd
  29. cs
  30. penpaint
  31. spiral 91 2 10 100
  32. cs
  33. setpensize [1 1]
  34. win
  35. end
  36.  
  37. to rose :size :petalcount :function
  38. make "ctr 0
  39. do.while ~
  40.    [ ~
  41.    line :size ~
  42.    rt 360 / :petalcount ~
  43.    make "ctr :ctr + 1 ~
  44.    run :function ~
  45.    ] ~
  46.    [:ctr < :petalcount]
  47. end
  48.  
  49. to line :length
  50. fd :length / 2
  51. pu
  52. bk :length
  53. pd
  54. fd :length / 2
  55. end
  56.  
  57. to hanoi :number 
  58. ;
  59. ; Towers of Hanoi
  60. ; Meyer A. Billmers
  61. ; November, 1983
  62. ;
  63. ; This procedure plays a graphic version of the Towers of Hanoi puzzle
  64. ; The argument is the number of disks in the configuration.
  65. ;
  66. ; c.f. putdisk, towercnt,towerset, hanoihlpr
  67. local "from
  68. local "to
  69. local "other
  70. local "datfil
  71. ;make "datfil openw "hanoi.dat
  72. ;fileprint :datfil (sentence [Hanoi of ] :number [towers Started at: ] time)
  73. ; to change the starting and ending needles, change the next three assignments
  74. make "from 1
  75. make "to 3
  76. make "other 2
  77. cs
  78. ht
  79. penpaint
  80. setpensize [5 5]
  81. ; first we draw the table and the golden needles
  82. setpencolor 255 0 0
  83. pu
  84. setxy -350 -100
  85. pd
  86. setxy 350 -100
  87. pu
  88. setx -240
  89. pd
  90. fd 250
  91. pu
  92. setxy -15 -100
  93. pd
  94. fd 250
  95. pu
  96. setxy 210 -100
  97. pd
  98. fd 250
  99. make "tower1 0
  100. make "tower2 0
  101. make "tower3 0
  102. ; draw the initial stack of disks. note that putdisk draws the 
  103. ; "fixed up" towers.
  104. repeat :number ~
  105.    [~
  106.    putdisk :from :number - repcount + 1 "final ~
  107.    ifelse :from = 1 ~
  108.       [make "tower1 :tower1 + 1] ~
  109.       [ifelse :from = 2 ~
  110.          [make "tower2 :tower2 + 1] ~
  111.          [make "tower3 :tower3 + 1] ~
  112.       ] ~
  113.    ]
  114. hanoihlpr :number :from :to :other
  115. ; fileprint :datfil (sentence [Hanoi Ended at: ] time)
  116. ; close :datfil
  117. end
  118.  
  119. to hanoihlpr :number :from :to :other
  120. ;
  121. ; Called by HANOI. Contains the actual recursive Towers of Hanoi algorithm
  122. ;
  123. local "tcf 
  124. local "tct
  125. if equalp :number 0 [stop]
  126. hanoihlpr :number-1 :from :other :to
  127. make "tcf towercnt :from
  128. make "tct towercnt :to
  129. towerset :from :tcf - 1
  130. putdisk :from :number "temp
  131. putdisk :to :number "temp
  132. putdisk :from :number "erase
  133. putdisk :to :number "final
  134. towerset :to :tct + 1
  135. hanoihlpr :number-1 :other :to :from
  136. end
  137.  
  138. to putdisk :tnum :dnum :state
  139. ;
  140. ; Called by HANOI to put a disk on a tower.
  141. ; first arg. is number of tower (1,2 or 3)
  142. ; second arg. is number of disk to draw (1 is smallest)
  143. ; third arg. is "final, "temp, or "erase depending on whether
  144. ;   disk is drawn in final state, in temporary state to indicate
  145. ;   motion, or is being erased (removed from this tower)
  146. ; Note that this procedure re-draws the tower correctly.
  147. ;
  148. local "tc
  149. local "halfsize
  150. make "tc towercnt :tnum
  151. make "halfsize sum 20 product :dnum 10
  152. pu
  153. ifelse :tnum = 1 ~
  154.    [setxy "-240 "-100] ~
  155.    [ ~
  156.    ifelse :tnum = 2 ~
  157.       [setxy "-15 "-100] ~
  158.       [setxy 210 "-100] ~
  159.    ]
  160. pe
  161. fd product 30 :tc
  162. pu
  163. setxy xcor - :halfsize ycor
  164. pd
  165. penpaint
  166. ifelse :state = "final ~
  167.    [setpencolor 0 255 0] ~
  168.    [ ~
  169.    ifelse :state = "temp ~
  170.       [setpencolor 0 0 255] ~
  171.       [pe] ~
  172.    ]
  173. fd 30
  174. rt 90
  175. fd product :halfsize 2
  176. rt 90
  177. fd 30
  178. rt 90
  179. pu
  180. fd :halfsize
  181. rt 90
  182. setpencolor 255 0 0
  183. ifelse :state = "erase ~
  184.    [ ~
  185.    pd ~
  186.    penpaint ~
  187.    fd 30 ~
  188.    ] ~
  189.    [ ~
  190.    pe ~
  191.    fd 30 ~
  192.    ]
  193. end
  194.  
  195. to towercnt :tn
  196. ;
  197. ; Called by HANOI. Returns the current number of disks on tower :tn,
  198. ; as stored in the globals tower1, tower2, and tower3.
  199. ;
  200. ifelse :tn = 1 ~
  201.    [output :tower1] ~
  202.    [ ~
  203.    ifelse :tn = 2 ~
  204.       [output :tower2] ~
  205.       [output :tower3] ~
  206.    ]
  207. end
  208.  
  209. to towerset :tn :value
  210. ;
  211. ; Called by HANOI. Sets the current number of disks on tower :tn,
  212. ; as stored in the globals tower1, tower2, and tower3.
  213. ;
  214. ifelse :tn = 1 ~
  215.    [make "tower1 :value] ~
  216.    [ ~
  217.    ifelse :tn = 2 ~
  218.       [make "tower2 :value] ~
  219.       [make "tower3 :value] ~
  220.    ]
  221. end
  222.  
  223. to spiral :angle :repeat :incr :segs
  224. ;; 
  225. ;; Spirals, by Meyer A. Billmers
  226. ;;  
  227. ;; This procedure makes pretty spirals. I suggest you first do a 
  228. ;; hideturtle so the drawing will proceed at a reasonable rate.
  229. ;; 
  230. ;; angle   is the amount of turn at each piece, 
  231. ;; repeat  is the number of turns before the distance is incremented, and
  232. ;; incr    is the amount of distance increment.
  233. ;; 
  234. ;; Suggested fun spirals:
  235. ;;     spiral 90 2 10
  236. ;;     spiral 91 2 10
  237. ;;     spiral 60 3 10
  238. ;;     spiral 61 3 10
  239. ;;     spiral 179 2 5
  240. ;;     spiral 20 10 4
  241. ;; 
  242. make "len :incr
  243. make "ctr 0
  244. repeat :segs ~
  245.   [ ~
  246.   fd :len ~
  247.   rt :angle ~
  248.   make "ctr :ctr + 1 ~
  249.   if :ctr = :repeat ~
  250.      [ ~
  251.      make "ctr 0 ~
  252.      make "len :len + :incr ~
  253.      ] ~
  254.   ]
  255. end
  256.  
  257. to win
  258. make "cmw 75
  259. make "cmh 30
  260. make "sth 12
  261. make "lsw :cmw
  262. make "lsh 20
  263. make "scw 10
  264. make "sch 40
  265. make "btw 50
  266. make "bth 12
  267. make "gapx 6
  268. make "gapy 6
  269. make "mary 2
  270. make "wnx 180
  271. make "wny 120
  272. make "wnx2 :wnx / 2
  273. make "wny2 :wny / 2
  274. make "wnx3 :wnx / 3
  275. make "wny3 :wny / 3
  276. make "wnx6 :wnx / 6
  277. make "wny6 :wny / 6
  278. make "st2w 30
  279. make "row2 :wny3+:gapy
  280. make "row3 :wny3*2-:gapy/2
  281.  
  282. windowcreate "main "d1 [This is a Demo Windows Application] 0 0 :wnx+:gapy :wny+:gapy
  283.  
  284. staticcreate "d1 "st2 [Run mode] :gapx :mary :cmw :sth
  285. groupboxcreate "d1 "g1 :gapx :sth+:mary :cmw :cmh
  286. checkboxcreate "d1 "g1 "cb1 [Hide Turtle] :gapx+:gapx :sth+:mary+:gapy :btw :bth
  287. checkboxcreate "d1 "g1 "cb2 [Status]      :gapx+:gapx :sth+:mary+:bth+4 :btw :bth
  288.  
  289. staticcreate "d1 "st3 [Select Post-Command] :wnx2+:gapx :mary :cmw :sth
  290. comboboxcreate "d1 "c2 :wnx2+:gapx :sth+:mary :cmw :cmh
  291. comboboxaddstring "c2 [RT 2]
  292. comboboxaddstring "c2 [RT 5]
  293. comboboxaddstring "c2 [RT 10]
  294. comboboxsettext "c2 [RT 5]
  295.  
  296. staticcreate "d1 "st4 [Select Shape] :gapx :row2 :lsw :sth
  297. listboxcreate "d1 "l1 :gapx :row2+:sth+1 :lsw :lsh
  298. listboxaddstring "l1 "SQUARE
  299. listboxaddstring "l1 "TRIANGLE
  300. listboxaddstring "l1 "HEXAGON
  301.  
  302. staticcreate "d1 "st11 "Red :wnx6*3+:gapx :row2 :st2w :sth
  303. scrollbarcreate "d1 "s1 :wnx6*3+:gapx :row2+:sth :scw :sch [myred]
  304. scrollbarset "s1 1 255 125 myred
  305.  
  306. staticcreate "d1 "st12 "Grn :wnx6*4+:gapx :row2 :st2w :sth
  307. scrollbarcreate "d1 "s2 :wnx6*4+:gapx :row2+:sth :scw :sch [mygreen]
  308. scrollbarset "s2 1 255 125 mygreen
  309.  
  310. staticcreate "d1 "st13 "Blue :wnx6*5+:gapx :row2 :st2w :sth
  311. scrollbarcreate "d1 "s3 :wnx6*5+:gapx :row2+:sth :scw :sch [myblue]
  312. scrollbarset "s3 1 255 125 myblue
  313.  
  314. staticcreate "d1 "st14 [Repeat Count] :gapx :row3 :sch*2 :sth
  315. scrollbarcreate "d1 "s4 :gapx :row3+:sth :sch*2 :scw [myrepeat]
  316. scrollbarset "s4 1 360 72 myrepeat
  317.  
  318. buttoncreate "d1 "b1 "END :gapx :wny-:bth-:gapy :btw :bth [myend]
  319. buttoncreate "d1 "b3 "CLEAR :wnx2-:btw/2 :wny-:bth-:gapy :btw :bth [cs]
  320. buttoncreate "d1 "b2 "DRAW :wnx-:btw-:gapx :wny-:bth-:gapy :btw :bth [drawthing]
  321. end
  322.  
  323. to drawthing
  324. setpencolor scrollbarget "s1 scrollbarget "s2 scrollbarget "s3
  325. ifelse checkboxget "cb1 [ht] [st]
  326. ifelse checkboxget "cb2 [status] [nostatus]
  327. repeat scrollbarget "s4~
  328.   [~
  329.   if equalp "HEXAGON listboxgetselect "l1 [repeat 6 [fd 100 rt 60]]~
  330.   if equalp "SQUARE listboxgetselect "l1 [repeat 4 [fd 100 rt 90]]~
  331.   if equalp "TRIANGLE listboxgetselect "l1 [repeat 3 [fd 100 rt 120]]~
  332.   run comboboxgettext "c2~
  333.   ]
  334. end
  335.  
  336. to myblue
  337. staticupdate "st13 sentence [Blue] scrollbarget "s3
  338. end
  339.  
  340. to myend
  341. windowdelete "d1
  342. end
  343.  
  344. to mygreen
  345. staticupdate "st12 sentence [Grn] scrollbarget "s2
  346. end
  347.  
  348. to mynil
  349. end
  350.  
  351. to myred
  352. staticupdate "st11 sentence [Red] scrollbarget "s1 
  353. end
  354.  
  355. to myrepeat
  356. staticupdate "st14 sentence [Repeat Count] scrollbarget "s4 
  357. end
  358.  
  359. to mystatic
  360. staticupdate "st14 sentence [Repeat Count] scrollbarget "s4 
  361. end
  362.